package org.game.db.proxy.bean;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.constant.smallkey.PlayerDataSmallKey;
import org.game.db.bean.PlayerData;
import org.game.db.vo.PlayerDataVO.DiscreteVO;
import org.game.db.vo.PlayerDataVO.EndlessVO;
import org.game.db.vo.PlayerDataVO.GashaponVO;
import org.game.db.vo.PlayerDataVO.ResBuyRecordVO;

import com.google.common.collect.Maps;
import com.sojoys.artifact.build.data.base.BasePojoProxy;
import com.sojoys.artifact.tools.ToolMap;


/**
 * @author : DengYing
 * @CreateDate : 2017年12月27日 下午2:55:16
 * @Description ：Please describe this document
 */
@SuppressWarnings("unchecked")
public class PlayerDataProxy extends BasePojoProxy<PlayerDataProxy, PlayerData> {

	

//	public <T> T getByData(int key,Object obj){
//		Object findObj = t.getData().get(key);
//		if (findObj == null) {
//			findObj = obj;
//			t.getData().put(key, findObj);
//			t.update();
//		}
//		return (T) findObj;
//	}
	
	
//	/**
//	 * 取得单个商城的数据
//	 * @param storeId
//	 * @return
//	 */
//	public Map<Integer, Object> getStoreDataByStoreId(int storeId){
//		Map storeData = getByData(PlayerDataSmallKey.TYPE_STORE, Maps.newHashMap());
//
//		Map<Integer, Object> singleStoreData = (Map<Integer, Object>) storeData.computeIfAbsent(storeId, k -> Maps.newHashMap());
//		
//		return singleStoreData;
//	}
	
//	
//	/**
//	 * 取得好友领取数据
//	 * @param type 1:取得最后领取时间 2：取得最后领取次数
//	 * @return
//	 */
//	public int getFriendReceive(int type){
//		long val = Long.valueOf(getByData(PlayerDataSmallKey.FRIEND_RECEIVE_AWAY_DATA, 0L).toString());
//		long time = val >> 32;
//		long count = val & ~(time << 32);
//		switch (type) {
//		case 1:
//			return (int) time;
//		case 2:
//			return (int) count;
//		}
//		return 0;
//	}
//	
//	/**
//	 * 取得好友领取数据
//	 * @param type 1:取得最后领取时间 2：取得最后领取次数
//	 * @return
//	 */
//	public void changeFriendReceive(long time ,long count){
//		long val = time << 32 | count;
//		t.getData().put(PlayerDataSmallKey.FRIEND_RECEIVE_AWAY_DATA, val);
//		t.update();
//	}
	
//	/**
//	 * 检查 & 重置 活跃
//	 */
//	public void checkAndResetActive(){
//		Date nowDate = new Date();
//		Date lasetResetActiveDate = getByData(PlayerDataSmallKey.LAST_RESET_ACTIVE_DATE, nowDate);
//		if(DateUtil.betweenDay(lasetResetActiveDate, nowDate, true) > 0){
//			Player player = t.getPlayerPkPlayerId();
//			BackpackVO backVO = player.getPlayerProxy().getBackpackByGoodsCid(ItemConstantId.PLAYER_ACTIVE);
//			if (backVO!=null) {
//				int count = backVO.countByCfg(ItemConstantId.PLAYER_ACTIVE);
//				if (count > 0) {
//					LogDsp log = LogDsp.newBuilder(GoodsDsp.RESET);
//					ItemManager.me().costGoodsByCid(player, MapUtil.of(ItemConstantId.PLAYER_ACTIVE, count), log, S2CItemMsg.ItemList.newBuilder());
//				}
//				t.getData().put(PlayerDataSmallKey.LAST_RESET_ACTIVE_DATE, nowDate);
//				t.update();
//			}
//		}
//	}
	

	
//    /**
//     * 取得抓娃娃蛋池
//     */
//    public String getGashaponPool() {
//        return getByData(PlayerDataSmallKey.GASHAPON_POOL, "");
//    }

//    /**
//     * 设置抓娃娃蛋池
//     */
//    public void setGashaponPool(String pool) {
//        t.getData().put(PlayerDataSmallKey.GASHAPON_POOL, pool);
//        t.update();
//    }

//    /**
//     * 取得抓娃娃蛋池ID
//     */
//    public int getGashaponPoolId() {
//        return getByData(PlayerDataSmallKey.GASHAPON_POOL_ID, 0);
//    }

//    /**
//     * 设置抓娃娃蛋池ID
//     */
//    public void setGashaponPoolId(int id) {
//        t.getData().put(PlayerDataSmallKey.GASHAPON_POOL_ID, id);
//        t.update();
//    }

//    /**
//     * 取得玩家抓娃娃cd结束时间
//     */
//    public long getGashaponCDEndTime() {
//        Object obj = getByData(PlayerDataSmallKey.GASHAPON_CD_END_TIME, 0L);
//        return Long.parseLong(obj.toString());
//    }

//    /**
//     * 设置玩家抓娃娃cd结束时间
//     */
//    public void setGashaponCDEndTime(long time) {
//        t.getData().put(PlayerDataSmallKey.GASHAPON_CD_END_TIME, time);
//        t.update();
//    }

//    /**
//     * 取得玩家抓娃娃蛋池刷新cd结束时间
//     */
//    public long getGashaponPoolRefreshCDEndTime() {
//        Object obj = getByData(PlayerDataSmallKey.GASHAPON_POOL_CD_END_TIME, 0L);
//        return Long.parseLong(obj.toString());
//    }

//    /**
//     * 设置玩家抓娃娃蛋池刷新cd结束时间
//     */
//    public void setGashaponRefreshCDEndTime(long time) {
//        t.getData().put(PlayerDataSmallKey.GASHAPON_POOL_CD_END_TIME, time);
//        t.update();
//    }
    
//    /**
//     * 设置无尽回廊最近通关时间
//     */
//    public void setEndlessLastPassTime(long time){
//        t.getData().put(PlayerDataSmallKey.ENDLESS_LAST_PASS_TIME, time);
//        t.update();
//    }

    
//    /**
//     * 取得无尽回廊最近通关时间
//     */
//    public long getEndlessLastPassTime(){
//        Object obj = getByData(PlayerDataSmallKey.ENDLESS_LAST_PASS_TIME, 0L);
//        return Long.parseLong(obj.toString());
//    }
    
//    /**
//     * 设置无尽回廊最近领奖时间
//     */
//    public void setEndlessLastRewardTime(long time){
//        t.getData().put(PlayerDataSmallKey.ENDLESS_LAST_REWARD_TIME, time);
//        t.update();
//    }

    
//    /**
//     * 取得无尽回廊最近领奖时间
//     */
//    public long getEndlessLastRewardTime(){
//        Object obj = getByData(PlayerDataSmallKey.ENDLESS_LAST_REWARD_TIME, 0L);
//        return Long.parseLong(obj.toString());
//    }
    
//    /**
//     * 设置无尽回廊今日最好成绩
//     */
//    public void setEndlessTodayBest(int stage){
//        t.getData().put(PlayerDataSmallKey.ENDLESS_TODAY_BEST, stage);
//        t.update();
//    }

    
//    /**
//     * 取得无尽回廊今日最好成绩
//     */
//    public int getEndlessTodayBest(){
//        return getByData(PlayerDataSmallKey.ENDLESS_TODAY_BEST, 0);
//    }
    
//    /**
//     * 设置无尽回廊今日挑战总耗时（秒）
//     */
//    public void setEndlessTodayCostTime(int time){
//        t.getData().put(PlayerDataSmallKey.ENDLESS_TODAY_COST_TIME, time);
//        t.update();
//    }

    
//    /**
//     * 取得无尽回廊今日挑战总耗时（秒）
//     */
//    public int getEndlessTodayCostTime(){
//        return getByData(PlayerDataSmallKey.ENDLESS_TODAY_COST_TIME, 0);
//    }
    
//    
//    /**
//     * 设置无尽回廊历史最好成绩
//     */
//    public void setEndlessHistoryBest(int stage){
//        t.getData().put(PlayerDataSmallKey.ENDLESS_HISTORY_BEST, stage);
//        t.update();
//    }

    
//    /**
//     * 取得无尽回廊历史最好成绩
//     */
//    public int getEndlessHistoryBest(){
//        return getByData(PlayerDataSmallKey.ENDLESS_HISTORY_BEST, 0);
//    }
    
//    /**
//     * 设置无尽回廊当前挑战关卡
//     */
//    public void setEndlessNowStage(int stage){
//        t.getData().put(PlayerDataSmallKey.ENDLESS_NOW_STAGE, stage);
//        t.update();
//    }
//
//    
//    /**
//     * 取得无尽回廊当前挑战关卡
//     */
//    public int getEndlessNowStage(){
//        return getByData(PlayerDataSmallKey.ENDLESS_NOW_STAGE, 0);
//    }

	
	/**
	 * 获取已经完成任务id列表
	 */
	public Map<Integer,Long> getCityDatingTime(){
		Map<Integer, Long> timeMap = (Map) t.getData().get(PlayerDataSmallKey.CITY_DATING_TRIGGER_TIME);
		if (timeMap == null) {
			timeMap = new HashMap<>();
			t.getData().put(PlayerDataSmallKey.CITY_DATING_TRIGGER_TIME, timeMap);
		}
		return timeMap;
	}
	
//    /**
//     * 获取城市约会刷新时间
//     */
//    public Map<Integer,Long> getCityDatingTime(int datingType){
//        Map<Integer,Long> timeMap = getByData(PlayerDataSmallKey.CITY_DATING_TRIGGER_TIME, Maps.newHashMap());
//        return ToolMap.getLong(datingType, timeMap, 0L);
//    }

//    /**
//     * 记录城市约会触发时间
//     */
//    public void recordCityDatingTriggerTime(int datingType){
//        Map<Integer,Long> timeMap = getByData(PlayerDataSmallKey.CITY_DATING_TRIGGER_TIME, Maps.newHashMap());
//        timeMap.put(datingType, new Date().getTime());
//    }

//    public void setLastCityDatingFireTime(Date date){
//        if (date == null){
//            date = new Date();
//        }
//        t.getData().put(PlayerDataSmallKey.LAST_FIRE_CITY_DATING_TIME, date.getTime());
//        t.update();
//    }
//
//    public Date getLastCityDatingFireTime(){
//        Date date;
//        Object dateStr = t.getData().get(PlayerDataSmallKey.LAST_FIRE_CITY_DATING_TIME);
//        if (dateStr == null){
//            date = new Date();
//        }else{
//            date = new Date(Long.valueOf(dateStr.toString()));
//        }
//        return date;
//    }
    
//    /**
//	 * 获取活动数据
//	 */
//	public Map<Integer, PlayerActivity> getActivityData(){
//		Map<Integer, Map> data = (Map<Integer, Map>) t.getData().computeIfAbsent(PlayerDataSmallKey.TYPE_ACTIVITY, k-> Maps.newHashMap());
//		
//		Map<Integer, PlayerActivity> activitys = new HashMap<>(data.size());
//		
//		PlayerActivity playerActivity = null;
//		for (Entry<Integer, Map> e : data.entrySet()) {
//			ActivityInfo activityInfo = ActivityInfoCache.getById(e.getKey());
//			if (activityInfo == null) {
//				continue;
//			}
//			playerActivity = new PlayerActivity(e.getValue(),activityInfo);
//			activitys.put(e.getKey(), playerActivity);
//		}
//		return activitys;
//	}
    
    
    
    
    
    
    
    
    
    
    
    
    
    public void save(){
		t.update();
	}
    
    /**
	 * 获取已经完成任务id列表
	 */
	public Map<Integer, Integer> getFinishTasks(){
		Map<Integer, Integer> finishTasks = (Map) t.getData().get(PlayerDataSmallKey.FINISH_TASK_ID);
		if (finishTasks == null) {
			finishTasks = new HashMap<>();
			t.getData().put(PlayerDataSmallKey.FINISH_TASK_ID, finishTasks);
		}
		return finishTasks;
	}
    
    /**
	 * 取得玩家需要恢复的道具(资源)
	 * @return
	 */
	public Map<Integer, Long> getAutoRecover(){
		Map map = (Map) t.getData().get(PlayerDataSmallKey.AUTO_RECOVER);
		if (map == null) {
			map = new HashMap<>();
			t.getData().put(PlayerDataSmallKey.AUTO_RECOVER, map);
		}
		return map;
	}
    
    /** 取得离散数据 */
    public DiscreteVO getDiscreteVO(){
    	DiscreteVO discreteVO = (DiscreteVO) t.getData().get(PlayerDataSmallKey.DISCRETE_VO);
    	if (discreteVO == null) {
    		discreteVO = new DiscreteVO();
    		t.getData().put(PlayerDataSmallKey.DISCRETE_VO, discreteVO);
		}
    	return discreteVO;
    }
    
    /** 取得抓娃娃数据 */
    public GashaponVO getGashaponVO(){
    	GashaponVO gashaponVO = (GashaponVO) t.getData().get(PlayerDataSmallKey.GASHAPON_VO);
    	if (gashaponVO == null) {
    		gashaponVO = new GashaponVO();
    		t.getData().put(PlayerDataSmallKey.GASHAPON_VO, gashaponVO);
		}
    	return gashaponVO;
    }
    
    /** 取得无尽副本数据 */
	public EndlessVO getEndlessVO(){
    	EndlessVO endlessVO = (EndlessVO) t.getData().get(PlayerDataSmallKey.ENDLESS_VO);
    	if (endlessVO == null) {
    		endlessVO = new EndlessVO();
    		t.getData().put(PlayerDataSmallKey.ENDLESS_VO, endlessVO);
		}
    	return endlessVO;
    }
	
	/** 取得购买资源 */
	public Map<Integer, ResBuyRecordVO> getResBuyRecordVO(){
		Map<Integer, ResBuyRecordVO> map = (Map) t.getData().get(PlayerDataSmallKey.RES_BUY_RECORD);
		if (map == null) {
			map = new HashMap<>();
			t.getData().put(PlayerDataSmallKey.RES_BUY_RECORD, map);
		}
		return map;
    }
    
//	/** 取得城市约会数据 */
//    public CityDatingVO getCityDatingVO(){
//    	CityDatingVO cityDatingVO = (CityDatingVO) t.getData().get(PlayerDataSmallKey.CITY_DATING_VO);
//    	if (cityDatingVO == null) {
//    		cityDatingVO = new CityDatingVO();
//    		t.getData().put(PlayerDataSmallKey.CITY_DATING_VO, cityDatingVO);
//		}
//    	return cityDatingVO;
//    }
    
    
}
